import * as tool from './tool'

/**
 * 输入对话框参数
 * @typedef {Object} InputOptions
 * @property {string} title - 标题
 * @property {string} message - 消息内容
 * @property {string} placeholder - 占位符
 * @property {boolean} autoClose - 自动关闭
 */

/**
 * 输入框返回值
 * @typedef {Object} InputResult
 * @property {boolean} confirm - 用户是否点击了确认按钮
 * @property {string} value - 用户输入的文本值
 */

/**
 * 输入对话框
 * @param {InputOptions} options - 输入对话框参数
 * @returns {Promise<InputResult>} - 输入框返回值
 */
export function input(options) {
    return tool.getTools().qlyInputDialog(options)
}

/**
 * @typedef {Object} MessageOptions
 * @property {string} title - 消息标题
 * @property {string} message - 消息内容
 */

/**
 * 消息框
 * @param {MessageOptions} options - 消息框参数
 * @returns {Promise<void>} - 无返回值
 */

export function message(options) {
    return tool.getTools().qlyMessage(options)
}

/**
 * @typedef {Object} MessageBoxOptions
 * @property {string} title - 消息标题
 * @property {string} message - 消息内容
 * @property {string} cancelText - 取消按钮文字
 * @property {string} confirmText - 确认按钮文字
 */

/**
 * 消息框
 * @param {MessageBoxOptions} options - 消息框参数
 * @returns {Promise<Boolean>} - 是否确认
 */
export function messageBox(options) {
    return tool.getTools().qlyMessageBox(options)
}

/**
 * @typedef {Object} MessageSelectOptions
 * @property {string} title - 标题
 * @property {Array} data - 选项
 */

/**
 * @typedef {Object} MessageSelectResult
 * @property {Boolean} confirm - 是否确认
 * @property {Object} item - 选项
 */

/**
 * 消息框
 * @param {MessageSelectOptions} options - 选择框参数
 * @returns {Promise<MessageSelectResult>} - 是否确认
 */
export function messageSelect(options) {
    return tool.getTools().qlyMessageSelect(options)
}

/**
 * 吐司.
 * @param options - 吐司参数
 * @returns {Promise<unknown>} - 无返回
 */
export function toast(options) {
    return new Promise(resolve => {
        if (options.duration == null) {
            options.duration = 2000
        }
        if (options.icon == null) {
            options.icon = 'none'
        }
        if (options.title.length > 7) {
            options.icon = 'none'
        }
        uni.showToast(options)
        setTimeout(resolve, options.duration)
    })
}

/**
 * 操作成功.
 * @param message 消息
 * @returns {Promise<*>} 无返回
 */
export function success(message) {
    return toast({
        title: message || '操作成功',
    })
}

/**
 * 操作失败.
 * @param message 消息
 * @returns {Promise<*>} 无返回
 */
export function error(message) {
    return toast({
        title: message || '操作失败',
    })
}

/**
 * api异常
 * @param res 响应
 * @returns {Promise<*>}
 */
export function apiError(res) {
    return toast({
        title: res.errMessage || '系统繁忙',
    })
}
